package com.whfc.emp.manager;

import com.whfc.common.exception.BizException;
import com.whfc.common.result.PageData;
import com.whfc.common.result.PageVO;
import com.whfc.emp.dto.AppDeviceCardLogDTO;
import com.whfc.emp.dto.AppEmpInfoDTO;
import com.whfc.emp.dto.AppLocaleStateDTO;
import com.whfc.emp.dto.HelmetIconDTO;
import com.whfc.emp.entity.AppDeviceCardLog;
import com.whfc.emp.entity.AppEmpDay;
import com.whfc.emp.enums.AttendType;

import java.util.Date;
import java.util.List;

/**
 * @Description 安全帽数据处理服务
 * @Author hw
 * @Date 2020/12/30 14:50
 * @Version 1.0
 */
public interface AppEmpDataManager {

    /**
     * 获取安全帽图标
     *
     * @param sn
     * @return
     */
    HelmetIconDTO getHelmetIcon(String sn);

    /**
     * 查询人员安全帽数据
     *
     * @param empId
     * @param date
     * @param startTime
     * @param endTime
     * @return
     */
    List<AppDeviceCardLog> getHelmetDataLogByEmpId(Integer empId, Date date, Date startTime, Date endTime);
    /**
     * 查询人员安全帽数据
     *
     * @param empId
     * @param date
     * @param startTime
     * @param endTime
     * @return
     */
    PageVO<AppDeviceCardLog> getHelmetDataLogByEmpIdPage(Integer empId, Date date, Date startTime, Date endTime,Integer pageNum,Integer pageSize);

    /**
     * 查询安全帽数据
     *
     * @param deviceId
     * @param startTime
     * @param endTime
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageData<AppDeviceCardLogDTO> getHelmetDataLogByDeviceId(Integer deviceId, Date startTime, Date endTime, Integer pageNum, Integer pageSize);

    /**
     * 查询安全帽统计数据
     *
     * @param empIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<AppDeviceCardLogDTO> getHelmetStatByEmpIds(List<Integer> empIds, Date startTime, Date endTime);

    /**
     * 添加安全帽硬件数据
     *
     * @param cardLog
     */
    void addHelmetData(AppDeviceCardLog cardLog);

    /**
     * 初始化人员每日数据
     *
     * @param deptId
     * @param date
     * @return
     * @throws BizException
     */
    void initEmpDayData(Integer deptId, Date date);

    /**
     * 统计人员每日数据
     *
     * @param deptId
     * @param date
     * @return
     * @throws BizException
     */
    void statEmpDayData(Integer deptId, Date date);

    /**
     * 初始化人员每日统计信息
     *
     * @param empId
     * @param date
     * @return
     */
    AppEmpDay getEmpDay(Integer empId, Date date);

    /**
     * 统计项目每日人数
     *
     * @param deptId
     * @param date
     */
    void statDeptDay(Integer deptId, Date date);

    void checkWarn(AppDeviceCardLog log);

    AppLocaleStateDTO calculateLocaleState(Integer deptId, Integer empId, Double lng, Double lat, AttendType attendType);
}
